//
//
//
//class Solution {
//
//    List<List<Integer>> ret = new ArrayList<>();
//    List<Integer> cur = new ArrayList<>();
//    int sum = 0;
//
//    public List<List<Integer>> combinationSum(int[] candidates, int target) {
//        Arrays.sort(candidates);
//        dfs(candidates, 0, target);
//        return ret;
//    }
//
//
//    public void dfs(int[] arr, int index, int target) {
//        if (sum == target) {
//            ret.add(new ArrayList<>(cur));
//        }
//        if (sum >= target) return;
//        for (int i = index; i < arr.length; i++) {
//            cur.add(arr[i]);
//            sum += arr[i];
//            dfs(arr, i, target);
//            cur.remove(cur.size() - 1);
//            sum -= arr[i];
//        }
//    }
//}